python基础第十五节
函数: 是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
在之前的章节中, 其实我们已经接触到了许多的python内建函数, 如print, len, max等等.
比如len: 可以重复使用, 实现了统计长度这一特定功能的代码段.
好处: 提高程序的复用性, 减少重复性代码, 提高开发效率.
15.1 函数的定义和调用
def function_name(params):
"""注释"""
# 函数体
return [expression]
定义一个由自己想要功能的函数,以下定义语法:
- 函数代码块以 def 关键词开头,后接函数标识符名称和小括号**()**。
- 任何传入参数必须放在小括号中间。小括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
函数的调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构.
这个函数的基本结构完成以后,可以通过函数名+小括号来调用此函数.
function_name(params)
# 如此代码则是调用了名为function_name的函数.
例1: 定义一个打招呼的函数.
def say_hi():
print('Hi')
例2: 编写一个函数实现类似pythono内置函数len的功能.
注意点:
- 函数必须先定义, 才可以使用.
- 参数如果不需要,可以省略不写.
- 返回值如果不需要, 可以省略不写.
15.2 函数的参数传递
在函数进行计算的时候, 可以接受外部提供的数据. 参数的个数, 可以是多个, 也可以不给参数.
def func(a, b):
pass
# 在函数定义中, 提供的a, b称为: 形式参数, 简称为形参, 表示函数声明将要使用2个参数.参数之前用`,`分隔.
func(1, 2)
# 在函数的调用中, 传入的1,2 成为实际参数, 简称为实参, 表示函数执行的时候真正使用到的参数值, 传入参数时, 按照顺序传入对应的参数, 使用`,` 分隔.
如上面打招呼的函数, 每次调用, 都只能输出一个hi 用来打招呼, 如果我们需要对指定的人打招呼, 则上述的函数做不到. 这时我们就可以给函数传递参数.
案例1: 定义一个函数来实现任意2个数相加.
案例2: 自制一个计算器实现加减乘除.
扩展: eval(): 用于动态执行字符串形式的代码。它接受一个字符串参数作为输入,并将该字符串作为有效的Python表达式进行求值.
15.3 函数的返回值
在函数完成要做的事情之后, 向调用者返回数据.
def func():
# 函数体
pass
return [表达式(返回值)]
变量 = func()
return [表达式] 表示退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None.
None: python中特殊的数据类型, 其类型是NoneType, 表示 空的, 无实际意义的.
None和False不一样, None不是0, 也不是空字符串.
用于表示变量或表达式没有值. None在条件判断是会被视为False.
案例: 完善上述的计算器功能.
注意点:
- return表示退出函数, return后续的代码不会执行.
- return语句可以返回多个值.返回多个值默认以元组的形式返回.
15.4 函数的嵌套调用
函数的嵌套调用是指在一个函数内部调用另一个函数.
def func1():
print(1)
func2()
print(3)
def func2():
print(2)
func1()
案例: 使用函数的嵌套调用, 实现计算器.
15.5 函数的递归
函数的递归是指函数在其定义中调用自身的过程。递归是一种重要的编程技术,用于解决可以被拆分为相似子问题的问题.
递归函数需要满足以下两个重要条件:
- 基本情况(终止条件):递归函数必须包含一个或多个基本情况,即不再进行递归调用的条件。这是确保递归结束的关键,避免无限递归。
- 递归调用:递归函数在其定义中必须包含对自身的调用。通过递归调用,函数可以反复执行相同的操作,但在每次调用中传递不同的参数。
需要注意的是,递归函数的实现必须具备合适的终止条件,否则会导致无限递归,最终引发栈溢出错误。另外,递归的效率可能较低,因为它可能涉及多次函数调用和重复计算。在使用递归时,需要确保问题适合于递归解决,并根据实际情况评估其效率。
函数的递归在许多算法和数据结构问题中都有应用,例如树的遍历、阶乘计算、斐波那契数列等。递归的思想能够简化问题的表达和解决.
案例1: 倒计时.
案例2: 斐波那契数列.